package com.raja.servingStation.filter;

import com.alibaba.fastjson.JSONObject;
import com.raja.servingStation.common.constant.Constants;
import com.raja.servingStation.common.util.CommonResponse;
import com.raja.servingStation.common.util.JwtUtil;
import com.raja.servingStation.common.util.RequestUtil;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.filter.OncePerRequestFilter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**配置过滤器;目前只做设置跨域的设置
 * Created by liuyanjun
 * on 2017/4/5.
 */
public class AuthenticationFilter extends OncePerRequestFilter {
    private static final Logger log = LoggerFactory.getLogger(AuthenticationFilter.class);

    @Autowired
    private JwtUtil jwtUtil;

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
//        CommonResponse res = new CommonResponse();
//        response.setHeader("Content-type", "application/json;charset=UTF-8");
//        response.setHeader("Access-Control-Allow-Origin", "*"); //解决跨域访问报错
//        try {
//            JSONObject header = RequestUtil.parseHeader(request);
//            String token = header.getString("token");
//            String userId = header.getString("userId");
//            if (token != null && userId != null) {
////                    String tokenTemp = RedisUtil.getString(Constants.TOKEN_KEY+userId);
//                if (token != null && token.trim().length() > 0) {
//                    Claims claims = jwtUtil.parseBodyJWT(token);
//                    //判断请求的userId,和服务器下发的userId是否一致
//                    if (userId.equals(claims.getSubject())) {
//                        //判断token是否有效  true 有效 false 无效
//                        boolean isInvaild = jwtUtil.isTokenInvaild(claims);
//                        if (isInvaild) {
                            filterChain.doFilter(request, response);
//                        } else {
//                            res.setCode(Constants.RESCODE_NOLOGIN);
//                            res.setMsg("会话失效");
//                            JSONObject resJson = (JSONObject) JSONObject.toJSON(res);
//                            log.debug(resJson.toJSONString());
//                            response.getWriter().write(resJson.toJSONString());
//                        }
//                    } else {
//                        //如果不一致的话就返回如下信息
//                        res.setCode(Constants.RESCODE_ERROPARA);
//                        res.setMsg("用户不一致");
//                        JSONObject resJson = (JSONObject) JSONObject.toJSON(res);
//                        log.debug(resJson.toJSONString());
//                        response.getWriter().write(resJson.toJSONString());
//                    }
//                } else {
//                    res.setCode(Constants.RESCODE_NOLOGIN);
//                    res.setMsg("会话失效");
//                    JSONObject resJson = (JSONObject) JSONObject.toJSON(res);
//                    response.getWriter().write(resJson.toJSONString());
//                }
//            } else {
//                res.setCode(Constants.RESCODE_ERROPARA);
//                res.setMsg("header参数错误");
//                JSONObject resJson = (JSONObject) JSONObject.toJSON(res);
//                log.debug(resJson.toJSONString());
//                response.getWriter().write(resJson.toJSONString());
//            }
//        } catch (ExpiredJwtException ee) {
//            log.error(ee.getMessage(), ee);
//            res.setCode(Constants.RESCODE_NOLOGIN);
//            res.setMsg("会话失效");
//            JSONObject resJson = (JSONObject) JSONObject.toJSON(res);
//            log.debug(resJson.toJSONString());
//            response.getWriter().write(resJson.toJSONString());
//        } catch (Exception e) {
//            log.error(e.getMessage(), e);
//            res.setCode(Constants.RESCODE_EXCEPTION);
//            res.setMsg("数据异常");
//            JSONObject resJson = (JSONObject) JSONObject.toJSON(res);
//            log.debug(resJson.toJSONString());
//            response.getWriter().write(resJson.toJSONString());
//        }
    }
}
